
package es.upm.dit.gsi.opactv.util;

import es.upm.dit.gsi.opactv.Book;
import java.text.ParseException;
import java.util.ArrayList;
import org.json.JSONArray;
import org.json.JSONObject;

public class JSON {

    public JSON() {
        // NADA
    }

    public String getValue(String jsonData, String key) {
        try {
            JSONObject json = new JSONObject(jsonData);
            return json.get(key).toString();
        } catch (ParseException ex) {
            return null;
        }
    }

    public String sessionToJSON(String value, String key) {
        JSONObject json = new JSONObject();
        json.put("session", new JSONArray().put(new JSONObject().put(value, key)));
        return json.toString();
    }

    public String booksToJSON(ArrayList<Book> books) {
        JSONArray jsonBooks = new JSONArray();
        for (int i=0; i<books.size(); i++) {
            JSONObject jsonBook = new JSONObject();
            Book book = books.get(i);
            jsonBook.put("id", i);
            jsonBook.put("title", book.getTitle());
            jsonBook.put("author", book.getAuthor());
            jsonBooks.put(jsonBook);
        }
        return new JSONObject().put("books", jsonBooks).toString();
    }

    public String bookToJSON(Book book) {
        JSONArray jsonBook = new JSONArray();
        JSONObject bookData = new JSONObject();
        bookData.put("title", book.getTitle());
        bookData.put("author", book.getAuthor());
        bookData.put("description", book.getDescription());
        JSONArray tags = new JSONArray();
        for (String tag : book.getTags()) tags.put(tag);
        bookData.put("tags", tags);
        bookData.put("cover", book.getCover());
        jsonBook.put(bookData);
        return new JSONObject().put("book", jsonBook).toString();
    }

    public String errorToJSON(String errorType, String errorText) {
        JSONObject json = new JSONObject();
        JSONArray error = new JSONArray();
        error.put(new JSONObject().put("type", errorType));
        error.put(new JSONObject().put("description", errorText));
        json.put("error", error);
        return json.toString();
    }

}
